package com.ingenio.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONArray;
import org.json.JSONObject;

import com.ingenio.business.Almacen;
import com.ingenio.business.ConceptoMovimiento;
import com.ingenio.business.ControlCalidad;
import com.ingenio.business.DetalleMovimiento;
import com.ingenio.business.EstadoControlCalidad;
import com.ingenio.business.Movimiento;
import com.ingenio.business.Producto;
import com.ingenio.dao.AlmacenAdapter;
import com.ingenio.dao.ConceptoMovimientoAdapter;
import com.ingenio.dao.ControlCalidadAdapter;
import com.ingenio.dao.EstadoControlCalidadAdapter;
import com.ingenio.dao.MovimientoAdapter;

/**
 * Servlet implementation class EntregarMercaderiaServlet
 */
@WebServlet("/IngresarMercaderiaInventario")
public class IngresarMercaderiaInventarioServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public IngresarMercaderiaInventarioServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		if(request.getParameter("text") != ""){
			String jsonText = request.getParameter("text");
			try {
				JSONObject JSONrequest = new JSONObject(jsonText);
				JSONArray ja = JSONrequest.getJSONArray("detalle_control_calidad");
				
				List<DetalleMovimiento> listaMov = new ArrayList<DetalleMovimiento>();
				DetalleMovimiento dm = null;
				List<ControlCalidad> listaControlQ = new ArrayList<ControlCalidad>();
				ControlCalidad cc = null;
				ControlCalidadAdapter cca = new ControlCalidadAdapter();
				//HARCODEADO, tomar el ID del almacen del usuario
				AlmacenAdapter aa = new AlmacenAdapter();
				Almacen a = aa.devolverAlmacen(1);
				//HARCODEADO Concepto Movimiento 8: Aprobacion control de calidad
				ConceptoMovimientoAdapter cma = new ConceptoMovimientoAdapter();
				ConceptoMovimiento cm = cma.devolverConcepto(8); 
				Producto pr = null;
				MovimientoAdapter ma = new MovimientoAdapter();
				Movimiento m = null;
				Integer id_movimiento=null;
				Double cantidad_recepcionada=null, cantidad_aprobada=null;
				String motivo=null, id_prod=null;
				Date fechaRevision = new Date();
				EstadoControlCalidadAdapter ecca = new EstadoControlCalidadAdapter();
				EstadoControlCalidad ecc = null;
				
				for (int i = 0; i < ja.length(); i++) {
					JSONObject jo = (JSONObject) ja.get(i);
					// recupero datos enviados en el JSON
					id_prod = jo.getString("id_prod");
					id_movimiento = jo.getInt("id_movimiento");
					cantidad_aprobada = jo.getDouble("cantidad_aprobada");
					cantidad_recepcionada = jo.getDouble("cantidad_recepcionada");
					motivo = jo.getString("motivo");
					
					pr = new Producto();
					pr.setIdProducto(id_prod);
					m = ma.devolverMovimiento(id_movimiento);
					// creo Detalle de Movimiento
					dm = new DetalleMovimiento(m,pr,a,cantidad_aprobada);
					listaMov.add(dm);
					
					// determino Estado Control Calidad
					Double cero = 0.0;
					if(cero.equals(cantidad_aprobada)){
						ecc = ecca.devolverEstadoControlCalidad(2);	// Rechazado
					}else{
						if(cantidad_recepcionada.equals(cantidad_aprobada)){
							ecc = ecca.devolverEstadoControlCalidad(1); // Aprobado
						}else{
							ecc = ecca.devolverEstadoControlCalidad(4); // Aprobado Parcial
						}
					}
					
					// creo Control de Calidad
					cc = new ControlCalidad(dm, ecc, fechaRevision, cantidad_aprobada, motivo);
					listaControlQ.add(cc);
				}
				Movimiento movActInv = new Movimiento(null, fechaRevision, cm, null, null);
				movActInv.setDetallesMov(listaMov);
				// Actualizo Control de calidad e Incerto Movimiento
				cca.actualizarControlCalidad(listaControlQ, movActInv, a);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}
